Networked Properties連網屬性,在網路同步最重要的便是諸多數值的同步,在遊戲中可能是如血量、位置、速度、時間等等,在Photon Fusion中便提供連網屬性,連網屬性能夠標示需要同步的屬性,便能夠自動同步數值,但在Fusion中也連網屬性有所限制,並非所有屬性皆能同步。
[Networked]
public float Health { get; set; } //建立基本連網屬性
[Networked, Capacity(14)] //指定長度
public string Name { get; set; } = 100; //基本屬性賦值
已連網屬性遇到諸如字串、陣列、串列等等變動大小的資料型態,會需要指定最大大小,
[Networked]
public float Health { get; set; } //建立基本連網屬性
// 所有狀態皆能呼叫; 僅限擁有狀態授權能夠接收並使用
[Rpc (RpcSources.All, RpcTargets.StateAuthority, HostMode = RpcHostMode.SourceIsHostPlayer)]
public void RPC_BeDamage(float damage, RpcInfo info = default)
{
currentHealth -= damage;
}
public override void FixedUpdateNetwork()
{
RPC_BeDamage(1);
}
已連網屬性能夠同步數值,但倘諾需要修改數值則僅限定擁有該物件的狀態授權能夠修改該屬性,所以會需要用到前幾章的RPC來對擁有狀態授權的節點發送,才能夠修改數值。
public class Example : NetworkBehaviour
{
[Networked, OnChangedRender(nameof(OnColorChanged))]
public Color NetworkedColor { get; set; }
public Material material;
public void OnColorChanged()
{
material.color = NetworkedColor;
}
}
使用已連網屬性時,一個常見的例子是在已連網屬性的值發生變化時執行程式碼。在Fusion 中提供更改偵測,來相對方便的修改,及撰寫程式碼。
https://doc.photonengine.com/zh-tw/fusion/current/manual/data-transfer/networked-properties
https://doc.photonengine.com/zh-tw/fusion/current/manual/data-transfer/change-detection